//
//  ZRTokenModelView.swift
//  Sina
//
//  Created by 张锐 on 16/2/27.
//  Copyright © 2016年 zhangr. All rights reserved.
//

import UIKit
import AFNetworking
class ZRTokenModelView: NSObject {
    
    
    var model :ZRTokenModel?{
    
        return ZRTokenModel.readFromSand("token&user.db")
    
    }
    /**
     重构
     */
    override init() {
       
        super.init()
//        没用 改到保存用户数据之后再读一遍，因为是单例
//        model = ZRTokenModel.readFromSand("token&user.db")
    }
    /**
     单例
     */
     static let shareInstance = ZRTokenModelView()
    
    /// 返回access_token
    var access_token: String?{
        
        
        return model?.access_token
        
    }
    /**
     isLogin
     */
    var isLogin : Bool?{
    
        return model?.access_token == nil ? false : true
    
    }
    
    /**
     通过code获取token
     
     - parameter code: code
     */
    func getTokenByAccess_tokenFromOauth2(code : String, success : (()->()),failure : (()->())){
        
        let manager = AFHTTPSessionManager()
        /*
        
        必选	类型及范围	说明
        client_id	true	string	申请应用时分配的AppKey。
        client_secret	true	string	申请应用时分配的AppSecret。
        grant_type	true	string	请求的类型，填写authorization_code
        
        grant_type为authorization_code时
        必选	类型及范围	说明
        code	true	string	调用authorize获得的code值。
        redirect_uri	true	string	回调地址，需需与注册应用里的回调地址一致。
        */
        
        manager.responseSerializer.acceptableContentTypes?.insert("text/plain")
        
        let parameters:[String : NSObject] =
        ["client_id" :APPLE_KEY,
            "client_secret":APPLE_SECRET,
            "grant_type":"authorization_code",
            "code":code,
            "redirect_uri":BACK_URL]
        
        manager.POST("https://api.weibo.com/oauth2/access_token", parameters: parameters, progress: nil, success: { (_, json) -> Void in
            
            let token = ZRTokenModel(dict: (json as! [String:NSObject]))
            
            self.getUserInfoByShowFromUsers(token, success: success, failure: failure)
            
            }) { (_, error) -> Void in
                
                failure()
                print(error)
                
        }
        
        
        
    }
    /**
     通过token获取user信息
     */
    func getUserInfoByShowFromUsers(token : ZRTokenModel,success : (()->()),failure : (()->())){
        
        let manager = AFHTTPSessionManager()
        
        /*
        
        必选	类型及范围	说明
        access_token	true	string	采用OAuth授权方式为必填参数，OAuth授权后获得。
        uid	false	int64	需要查询的用户ID。
        screen_name	false	string	需要查询的用户昵称。
        */
        let parameters : [String : NSObject] = ["access_token" : token.access_token!,"uid" : token.uid!]
        
        manager.GET("https://api.weibo.com/2/users/show.json", parameters: parameters, progress: nil, success: { (_, json) -> Void in
            
            if let dict = json as? [String : NSObject]{
                
                token.screen_name = dict["screen_name"] as?String
                
                token.profile_image_url = dict["profile_image_url"] as?String
                
                //                print("\(token.screen_name),\(token.profile_image_url)")
                
                token.save("token&user.db")
                
                
                
                success()
            }
            
            }) { (_, error) -> Void in
                failure()
                print(error)
        }
        
        
    }


}
